package Model;

import java.util.ArrayList;

import DAO.InterfaceDAO.ProfesseurDAO;
import Factories.FactoryDAO;

public class Professeur extends Compte{

	private String numProf;
	private ArrayList<Classe> classe = new ArrayList<Classe>();
	private ProfesseurDAO pdao;
	private ArrayList<Etudiant> etudiants = new ArrayList<Etudiant>();

	private ArrayList<Exercice> exercices = new ArrayList<Exercice>();

	public void inviter(String n) {
		Etudiant e=new Etudiant();
		e.setNumIne(n);
		e.setActive(true);
		pdao.inviterEtud(e);
	}

	public ProfesseurDAO getPdao() {
		return pdao;
	}

	public void setPdao(ProfesseurDAO pdao) {
		this.pdao = pdao;
	}

	public String getNumProf() {
		return numProf;
	}

	public void setNumProf(String numProf) {
		this.numProf = numProf;
	}

	public ArrayList<Classe> getClasse() {
		return classe;
	}

	public void setClasse(ArrayList<Classe> classe) {
		this.classe = classe;
	}

	public void setEtudiant(ArrayList<Etudiant> etudiant) {
		this.etudiants = etudiant;
	}

	public void setExercices(ArrayList<Exercice> exercice) {
		this.exercices = exercice;
	}

	/**
	 * @retourne true si l'administrateur a deja invite le prof,
	 * false sinon
	 */
	public boolean inscription() {
		if (pdao.exist(nom,prenom,numProf) && pdao.enabled(this.login, this.motDePasse)){
			this.active = true;
			return pdao.update(this);
		} else if (pdao.exist(nom,prenom,numProf) && !pdao.enabled(this.login, this.motDePasse)){
			this.active = false;
			return pdao.update(this);
		}
		return pdao.create(this);
	}

	public void validerInscription(Etudiant e){
		e.setActive(true);
		pdao.inviterEtud(e);

	}

	public Professeur(int idCompte, String login, String motDePasse,
			String nom, String prenom, String numProf, ArrayList<Classe> classe) {
		super(idCompte, login, motDePasse, nom, prenom);

		this.numProf = numProf;
		this.classe = classe;
		this.pdao=FactoryDAO.getInstance(null).createProfDAO();
	}

	public Professeur() {
		this.pdao=FactoryDAO.getInstance(null).createProfDAO();
		classe = new ArrayList<Classe>();
	}

	private void copie(Professeur p ) {
		this.idCompte = p.idCompte;
		this.login = p.login;
		this.motDePasse = p.motDePasse;
		this.nom = p.nom;
		this.prenom = p.prenom;
		this.active = p.active;
		this.numProf = p.numProf;
		this.classe = p.classe;
		this.exercices = p.exercices;
		this.etudiants = p.etudiants;
	}

	public Professeur(int idCompte) {
		this.pdao=FactoryDAO.getInstance(null).createProfDAO();
		Professeur p = this.pdao.read(idCompte);
		p.etudiants = this.pdao.getEtudiants(idCompte);

		copie(p);
	}

	public void initAPartirDeBD(String numProf2, String nomProfesseur,
			String prenomProfesseur) {
		int id = this.pdao.id(nomProfesseur, prenomProfesseur);
		this.idCompte = id;
		Professeur pr = this.pdao.read(id);
		copie(pr);
	}

	//Roger : Attendre le DAO pour continuer a implementer.
	public ArrayList<Exercice> getExercices(String theme) {
		//this.pdao.getExercices();
		return this.pdao.getExercices(idCompte,theme);
	}	

	@Override
	public boolean isActive() {
		return pdao.enabled(login, motDePasse);
	}

	/**
	 * Pour avoir la liste des etudiants inscrits que possede ce professeur.
	 * @return
	 */
	public ArrayList<Etudiant> getEtudiants() {
		ArrayList<Etudiant> resultat = new ArrayList<Etudiant>();

		for(int i = 0 ; i<etudiants.size() ; i++)
		{
			Etudiant courant = etudiants.get(i);
			if(courant.isActive())
			{
				resultat.add(courant);
			}

		}
		return resultat;
	}

	/**
	 * Retourne la liste des etudiants ayant fait une demande d'inscription au professeur.
	 * @return
	 */
	public ArrayList<Etudiant> getDemandeEtudiants() {

		ArrayList<Etudiant> resultat = new ArrayList<Etudiant>();

		for(int i = 0 ; i<etudiants.size() ; i++)
		{
			Etudiant courant = etudiants.get(i);
			if(!courant.isActive())
			{
				resultat.add(courant);
			}

		}
		return resultat;
	}

	public ArrayList<Classe> getListeClasse() {
		return pdao.getClasses(idCompte);
	}

	public ArrayList<Etudiant> getEtudiantsClasse(Classe classe) {
		ArrayList<Etudiant> result = new ArrayList<Etudiant>();

		for(int i= 0 ; i< this.etudiants.size(); i++)
		{
			Etudiant courant = this.etudiants.get(i);
			Classe classeEtudiant = courant.getClasse();
			if(classeEtudiant.getNom().equalsIgnoreCase(classe.getNom()))
			{
				result.add(courant);
			}
		}
		return result;
	}

}
